package de.jmda.gen.java;

import javax.validation.constraints.NotNull;

import de.jmda.gen.GeneratorException;
import de.jmda.gen.java.ModifiersUtil.VisibilityModifier;

public interface ClassGenerator extends CompilationUnitTypeGenerator
{
	@NotNull String getClassName() throws GeneratorException;
	void setClassName(@NotNull String className);

	StringBuffer getExtendsClause() throws GeneratorException;
	void setExtendsClause(String extendsClause);

	StringBuffer getImplementsClause() throws GeneratorException;
	void setImplementsClause(String implementsClause);

	/**
	 * @return content of main method body
	 * @throws GeneratorException
	 */
	String getMainMethod() throws GeneratorException;

	/**
	 * @param string content of main method body
	 */
	void setMainMethod(String string);
	
	void addAnnotation(Class<?> anntotation, StringBuffer parameters);
	void addInstanceMethodGenerator(InstanceMethodDeclarationGenerator generator);
	void addInstanceFieldGenerator(InstanceFieldDeclarationGenerator generator);
	void setVisibility(VisibilityModifier modifier);
}